package com.ruoyi.common.enums;

import com.ruoyi.common.utils.StringUtils;

import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;

/**
 * @Author: azh
 * Created on 2025-3-1 16:42
 */
public enum InspectionStepEnum {

    UNKNOWN("未知", "未知"),

    /**
     * 拍摄采集箱
     */
    CAPTURE_COLLECTION_BOX("拍摄采集箱", "拍摄采集箱照片"),

    /**
     * 拍摄采集箱内部
     */
    CAPTURE_COLLECTION_BOX_INTERIOR("拍摄采集箱内部", "拍摄采集箱内部照片"),

    /**
     * 拍摄禁锢螺栓
     */
    CAPTURE_BOLT("拍摄禁锢螺栓", "拍摄禁锢螺栓照片"),

    /**
     * 拍摄传感器
     */
    CAPTURE_SENSOR("拍摄传感器", "拍摄传感器照片"),

    /**
     * 检查风雨传感器
     */
    INSPECT_RAIN_WIND_SENSOR("检查风雨传感器", "检查风雨传感器状态"),

    /**
     * 检查固定件及箱体
     */
    INSPECT_FIXTURES_AND_BOX("检查固定件及箱体", "检查固定件及箱体状态"),

    /**
     * 检查测试防雷与设备地线
     */
    INSPECT_LIGHTNING_PROTECTION_AND_GROUNDING("检查测试防雷与设备地线", "检查测试防雷与设备地线状态"),

    /**
     * 通断实验
     */
    CONTINUITY_TEST("通断实验", "进行通断实验"),

    /**
     * 电压测试
     */
    VOLTAGE_TEST("电压测试", "进行电压测试"),

    /**
     * 电压拍照
     */
    CAPTURE_VOLTAGE_PHOTO("电压拍照", "拍摄电压测试照片"),

    /**
     * 按表填写内容并誉抄
     */
    FILL_AND_COPY_CONTENT("按表填写内容并誉抄", "按表填写内容并誉抄"),

    /**
     * 拍摄签字照片
     */
    CAPTURE_SIGNATURE_PHOTO("拍摄签字照片", "拍摄签字照片"),

    /**
     * 结束流程
     */
    END_PROCESS("结束流程", "结束巡检流程"),

    /**
     * 开始流程
     */
    START_PROCESS("开始流程", "开始巡检流程");

    private final String code; // 唯一标识
    private final String description; // 描述

    InspectionStepEnum(String code, String description) {
        this.code = code;
        this.description = description;
    }

    public String getCode() {
        return code;
    }

    public String getDescription() {
        return description;
    }

    public static InspectionStepEnum of(String type) {
        return Arrays.stream(InspectionStepEnum.values())
                .filter(it -> StringUtils.equals(it.name(), type))
                .findFirst()
                .orElse(UNKNOWN);
    }

    public static List<InspectionStepEnum> list() {
        return Arrays.stream(InspectionStepEnum.values())
                .filter(it -> !StringUtils.equals(it.name(), UNKNOWN.name()))
                .collect(Collectors.toList());
    }
}
